import { getCartData, upDateCartCount, deleteGoods, addGoods } from '@/network/api/cart'
import { Toast } from 'vant'
const cart = {
  namespaced: true,
  state: {
    cartList: []
  },
  getters: {
    // 全选按钮显示变量
    allSelected(state) {
      let result = true
      // 判断, 如果有一个数据的selectedState为false, 就返回false, 否则返回true
      state.cartList.forEach(item => {
        if (!item.selectedState) result = false
      })
      return result
    },
    // 购物车商品数量
    goodsCount(state) {
      return state.cartList.length
    },
    // 计算总价格(已选择的)
    totalPrice(state) {
      return state.cartList.filter(item => item.selectedState).reduce((prev, item) => prev + item.price * item.count, 0)
    },
    // 已选数量
    selectedCount(state) {
      return state.cartList.filter(item => item.selectedState).length
    }
  },
  mutations: {
    // 对请求到的购物车数据进行处理, 增加selectedState, 默认为false
    INIT_CART_DATA(state, payload) {
      payload.forEach(item => {
        item.selectedState = false
      })
      state.cartList = payload
    },
    // 全选按钮功能
    ALL_SELECT(state, allSelected) {
      // 获取当前的全选按钮的状态
      if (allSelected) {
        // 如果是true, 把cartList中的所有selectedState改为false
        state.cartList.forEach(item => {
          item.selectedState = false
        })
      } else {
        // 相反的操作
        state.cartList.forEach(item => {
          item.selectedState = true
        })
      }
    },
    // 通过index改变某个商品的选中状态
    CHANGE_OPTION(state, index) {
      // 对state中的cartList中的某个商品的selectedState进行取反
      state.cartList[index].selectedState = !state.cartList[index].selectedState
    },
    // 修改state中的cartList中的count
    UPDATE_SUCCESS(state, newData) {
      const { goodsId, newCount } = newData
      state.cartList.forEach(item => {
        if (item.goodsId === goodsId) {
          item.count = newCount
        }
      })
    },
    // 删除state中的cartList中的某个商品
    DELETE_SUCCESS(state, index) {
      state.cartList.splice(index, 1)
    },
    // 购物车商品++
    // COUNTINCREMENT(state, goodsId) {
    //   state.cartList.forEach(item => {
    //     if (item.goodsId === goodsId) {
    //       item.count ++
    //     }
    //   })
    // }
  },
  actions: {
    // 请求购物车数据
    async REQUEST_CART_DATA({ commit, rootState }) {
      const res = await getCartData(rootState.user.userId)
      commit('INIT_CART_DATA', res.data)
    },
    // 修改购物车商品的count
    async UPDATE_CART_COUNT({ commit }, payload) {
      const { userId, goodsId, newCount } = payload
      const res = await upDateCartCount(userId, goodsId, newCount)
      if (res.status === 200) {
        // 更新vuex中的count
        commit('UPDATE_SUCCESS', { goodsId, newCount })
      }
    },
    // 删除购物车中某个商品
    async DELETE_GOODS({ commit }, payload) {
      // id: 数据库goods-cart表中的主键id, index: vuex中的state中的cartList的要删除的商品的索引index
      const { id, index } = payload
      const res = await deleteGoods(id)
      if (res.status === 200) {
        // 更新vuex中的cartList
        commit('DELETE_SUCCESS', index)
      }
    },
    // 添加到购物车
    async ADD_GOODS({ commit, state, rootState }, id) {
      let newCount = 0
      // 分为两种情况
      // 1. 购物车里有这件商品, 商品数量 + 1
      let flag = false
      state.cartList.forEach(item => {
        if (item.goodsId === id) {
          flag = true
          newCount = ++item.count
        }
      })
      if (flag) {
        // 更新数据库
        console.log(111);
        const res = await upDateCartCount(rootState.user.userId, id, newCount)
        if (res.status === 200) Toast.success('购物车商品 + 1')
      }
      // 2. 购物车里没有, 添加到购物车 userId, goodsId
      else {
        // 更新数据库
        const res = await addGoods(id, rootState.user.userId)
        if (res.status === 200) {
          Toast.success('添加购物车成功')
        }
        // 更新vuex
        const result = await getCartData(rootState.user.userId)
        commit('INIT_CART_DATA', result.data)
      }
    }
  }
}
export default cart